/**
 * 支行综合评分公共组件
 * 用于获取所有支行的最终加权得分
 */

import { ref } from 'vue'
import { useComprehensiveScore } from './useComprehensiveScore.js'
import { useScoreCalculation } from './useScoreCalculation.js'

export function useBranchScore() {
  const isLoading = ref(false)
  const error = ref(null)
  const branchScores = ref({}) // { orgNo: { orgName, score, rank } }

  const { fetchAllBranchesData, getOrgName, indicators } = useComprehensiveScore()
  const { calculateAllScores } = useScoreCalculation()

  /**
   * 获取所有支行的综合评分
   * @param {string} bussDate - 业务日期，格式：YYYYMMDD
   * @returns {Promise<Object>} 支行评分数据
   */
  const fetchBranchScores = async (bussDate = '20250831') => {
    isLoading.value = true
    error.value = null
    branchScores.value = {}

    try {
      console.log('[支行评分] 开始获取所有支行数据...')
      
      // 1. 获取所有支行的所有指标数据
      const result = await fetchAllBranchesData(bussDate)
      const scoreData = result.data
      const endDate = result.endDate
      const startDate = result.startDate
      
      console.log('[支行评分] 数据获取完成，开始计算评分...')
      console.log('[支行评分] 期末日期:', endDate, '期初日期:', startDate)
      
      // 2. 计算所有支行的综合评分
      const scoreResult = calculateAllScores(scoreData, indicators)
      
      console.log('[支行评分] 评分计算完成')
      
      // 保存原始数据到全局，供详情页使用
      window.__RAW_SCORE_DATA__ = {
        scoreData: scoreData,
        scoreResult: scoreResult,
        indicators: indicators,
        bussDate: endDate,  // 使用期末日期（上季度末）而不是输入日期
        startDate: startDate  // 同时保存期初日期
      }
      console.log('[支行评分] 原始数据已保存到全局')
      
      // 3. 整理成简单的格式：{ orgNo: { orgName, score, rank } }
      const scores = {}
      Object.entries(scoreResult.branches).forEach(([orgNo, data]) => {
        scores[orgNo] = {
          orgNo,
          orgName: getOrgName(orgNo),
          score: data.weightedScore,              // 加权得分，保留小数精度
          weightedScore: data.weightedScore,      // 完整的加权得分
          averageScore: data.averageScore,        // 加权平均得分
          totalWeight: data.totalWeight,          // 总权重
          rank: data.rank                         // 排名
        }
      })
      
      branchScores.value = scores
      
      console.log('[支行评分] 整理完成，共', Object.keys(scores).length, '个支行')
      
      return scores
    } catch (err) {
      error.value = err
      console.error('[支行评分] 获取评分失败:', err)
      throw err
    } finally {
      isLoading.value = false
    }
  }

  /**
   * 获取指定支行的评分
   * @param {string} orgNo - 机构号
   * @returns {Object|null} 支行评分数据
   */
  const getBranchScore = (orgNo) => {
    return branchScores.value[orgNo] || null
  }

  /**
   * 获取所有支行的评分列表（按排名排序）
   * @returns {Array} 支行评分列表
   */
  const getBranchScoreList = () => {
    return Object.values(branchScores.value).sort((a, b) => a.rank - b.rank)
  }

  /**
   * 获取评分等级
   * @param {number} score - 评分
   * @returns {string} 等级名称
   */
  const getScoreLevel = (score) => {
    if (score >= 90) return "优秀"
    if (score >= 85) return "良好"
    if (score >= 80) return "中等"
    if (score >= 75) return "预警"
    return "待改进"
  }

  /**
   * 获取评分对应的颜色
   * @param {number} score - 评分
   * @returns {string} 颜色值
   */
  const getScoreColor = (score) => {
    if (score >= 90) return "#29D9D5" // 优秀 - 青色
    if (score >= 85) return "#3C8BFF" // 良好 - 亮蓝色
    if (score >= 80) return "#4A5DDE" // 中等 - 蓝紫色
    if (score >= 75) return "#5A3EC8" // 预警 - 深紫色
    return "#4C3087"                   // 待改进 - 暗紫色
  }

  return {
    // 状态
    isLoading,
    error,
    branchScores,
    
    // 方法
    fetchBranchScores,
    getBranchScore,
    getBranchScoreList,
    getScoreLevel,
    getScoreColor
  }
}

